Account for alignment when reading xbm data. (#346721, patch by Dave
authorRichard Hult <richard@imendio.com>
Mon, 10 Jul 2006 09:54:21 +0000 (09:54 +0000)
committerRichard Hult <rhult@src.gnome.org>
Mon, 10 Jul 2006 09:54:21 +0000 (09:54 +0000)
2006-07-10  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data):
Account for alignment when reading xbm data. (#346721, patch
by Dave Vasilevsky)

ChangeLog
ChangeLog.pre-2-10
gdk/quartz/gdkpixmap-quartz.c

index 2713f797f4a5ff404573e9f40107cc5bcbc988fa..cdc5adce1d5b67243d1c86733937c4c691c93ed8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-07-10  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data): 
+       Account for alignment when reading xbm data. (#346721, patch
+       by Dave Vasilevsky)
+
 2006-07-09  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkgeometry-quartz.c:
index 2713f797f4a5ff404573e9f40107cc5bcbc988fa..cdc5adce1d5b67243d1c86733937c4c691c93ed8 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-10  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkpixmap-quartz.c: (gdk_bitmap_create_from_data): 
+       Account for alignment when reading xbm data. (#346721, patch
+       by Dave Vasilevsky)
+
 2006-07-09  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkgeometry-quartz.c:
index 825df810a0d8f3952d183b2df6d1e35a7a1019da..addeb42f179d32ddcbc970f6d1209087cba46686 100644 (file)
@@ -201,7 +201,7 @@ gdk_bitmap_create_from_data (GdkDrawable *window,
 {
   GdkPixmap *pixmap;
   GdkPixmapImplQuartz *impl;
-  int x, y;
+  int x, y, bpl;
 
   g_return_val_if_fail (data != NULL, NULL);
   g_return_val_if_fail ((width != 0) && (height != 0), NULL);
@@ -212,19 +212,21 @@ gdk_bitmap_create_from_data (GdkDrawable *window,
 
   g_assert (CGImageGetBytesPerRow (impl->image) == width);
 
+  /* Bytes per line: Each line consumes an integer number of bytes, possibly
+   * ignoring any excess bits. */
+  bpl = (width + 7) / 8;
   for (y = 0; y < height; y++)
     {
-      guchar *ptr = impl->data + y * width;
-      gint idx;
-      
+      guchar *dst = impl->data + y * width;
+      const gchar *src = data + (y * bpl);   
       for (x = 0; x < width; x++)
        {
-         if ((data[(y * width + x) / 8] >> x % 8) & 1)
-           *ptr = 0xff;
+         if ((src[x / 8] >> x % 8) & 1)
+           *dst = 0xff;
          else
-           *ptr = 0;
+           *dst = 0;
 
-         ptr++;
+         dst++;
        }
     }